package com.ctshk.rpc.iotc.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.iotc.dto.OperateBankPreferenceListDTO;
import com.ctshk.rpc.iotc.dto.OperateBankPreferenceQueryDTO;
import com.ctshk.rpc.iotc.req.*;

import java.util.List;

/**
 * <p>
 * 银联优惠 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-01-22
 */
public interface IOperateBankPreferenceService {

    /**
     * 新增银联优惠
     */
    Result add(OperateBankPreferenceAddReq req, TokenUser tokenUser);

    /**
     * 修改银联优惠
     */
    Result update(OperateBankPreferenceUpdateReq req, TokenUser tokenUser);

    /**
     * 修改银联优惠状态
     */
    Result updateStatus(CodeStatusReq req, TokenUser tokenUser);

    /**
     * 审核银联优惠
     */
    Result approvalCode(Long codeId,TokenUser tokenUser);

    /**
     * 查询银联优惠详情
     */
    OperateBankPreferenceQueryDTO query(OperateBankPreferenceQueryReq req);

    /**
     * 查询银联优惠列表
     */
    PageResponse<OperateBankPreferenceListDTO> list(OperateBankPreferenceListReq req, TokenUser tokenUser);

    /**
     * (提供内部接口)查询符合条件的银联优惠列表
     */
    List<OperateBankPreferenceListDTO> conformList(OperateBankConformReq req);

    /**
     * (提供内部接口)扣减银联优惠剩余名额及剩余金额
     */
    Result deduct(OperateBankDeductReq req, TokenUser tokenUser);

    /**
     * (提供内部接口)查看并校验
     */
    Result<OperateBankPreferenceQueryDTO> queryConform(OperateBankConformQueryReq req);

    /**
     * (提供内部接口)退回银联优惠剩余名额及剩余金额
     */
    Result refundUpdate(OperateBankRefundReq req, TokenUser currentUser);

    /**
     * 查询符合业务类型对应的产品ID集合
     *
     * @param businessType
     * @return
     */
    List<Long> queryRelationIdList(Integer businessType);

    /**
     * 银联优惠审核
     *
     * @param req
     * @return
     */
    Result approval(OperateBankApprovalReq req);

    /**
     * 定时任务每分钟被吊起一次，检查所有银联优惠是否失效（如果有失效置换标记状态）
     * @return
     */
    void reflush();
}
